.. _ecmIxMot_MoveVia2X_Start: ecmIxMot_MoveVia2X_Start ======================== ------------------------ SYNOPSIS -------- .. code-block:: none t_cmdidx ecmIxMot_MoveVia2X_Start( t_i32 NetID, t_i32 MapIndex, t_handle32 P2[], t_bool P3[], t_bool IsAbsPosMode, t_i32 RoundPosType, t_f64 NormRadius, t_f64 MinRadius, t_i32 *ErrCode ) DESCRIPTION ----------- - 이 함수는 2축을 대상으로 하는 경유이송(Move-Via)을 시작하는 함수입니다. 경유이송은 2개의 축이 속도의 연속성을 유지하면서 현재 위치로부터 어느 한 점을 경유하여 목표 위치로 보간 이송을 수행하는 것을 말합니다. .. image:: ecmIxMot_MoveVia2X_Start_00.jpg - 경유점을 통과할 때에는 속도의 연속성을 확보하기 위해서 원호보간 이송이 자동으로 삽입됩니다. 경유이송이 단순한 원호삽입 이송과 다른 점은 반드시지정된 경유점을 지나도록 원호가 삽입된다는 것입니다 . * 반드시 경유점을 지난다는 것은 지령위치 기준으로 말하는 것이며 피드백 위치를 기준으로 말하는 것은 아닙니다. 지령위치가 경유점을 지나더라도 피드백 위 치는 모터의 게인 튜닝 상태등과 같은 여러 가지 요인에 의해서 영향을 받아서 경유점을 지나지 않을 수도 있습니다. PARAMETER --------- - NetID : Network 번호 - MapIndex : 보간 맵 번호 - P2[] : 경유점 좌표 포인트(2축의 좌표를 표현하는 배열) - P3[] : 목표점 좌표 포인트(2축의 좌표를 표현하는 배열) - IsAbsPosMode : 지정된 좌표 데이터가 상대좌표인지 절대좌표인지를 나타내는 플래그 +-------+--------------------------------------------+ | Value | Meaning | +=======+============================================+ | 0 | 상대좌표값으로 P2, P3 데이터를 전달합니다. | +-------+--------------------------------------------+ | 1 | 절대좌표값으로 P2, P3 데이터를 전달합니다. | +-------+--------------------------------------------+ - :ref:`RoundPosType ` : 삽입되는 라운드와 경유점과의 위치 관계를 나타내는 인자입니다 (EEcmRoundPosType 선언 참조). - NormRadius : 자동으로 삽입되는 라운드의 크기(원호의 반지름)를 나타내는 인자입니다. - MinRadius : P1이 라운드 원의 외부에 있을 때는 ‘NormRadius’를 적용하지만 P1이 원의 내부에 있을 때는 P1의 위치에 따라서 원의 크기가 조정됩니다. 이때 조정할 수 있는 원의 최소 크기(반지름)를 나타내는 인자입니다 - ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다. RETURN VALUE ------------ - 이 함수는 CmdIdx를 반환 합니다. CmdIdx는 ComiECAT SDK라이브러리에서 발생시킨 명령들의 일련 번호입니다. 단, 이 값이 0이면 함수의 수행이 실패했음을 의 미합니다. EXAMPLE ````````````` .. code-block:: cpp :linenos: #define NETID 0 #define IX_MAP_IDX 0 t_i32 axisList[2] = {2, 3}; // 축 번호 리스트 t_f64 P1[2] = {0, 0}; // 시작점 t_f64 P2[2] = {1000000, 500000}; // 경유점 t_f64 P3[2] = {1200000, 1000000}; // 종점 // 보간 축 맵핑 ecmIxCfg_MapAxes(NETID, IX_MAP_IDX, 2, axisList, NULL); // 보간 속도 설정 ecmIxCfg_SetSpeedPatt(NETID, IX_MAP_IDX, ecmIXSPT_VECTOR, ecmSMODE_SCURVE, 0, 0, 500000, 2500000, 2500000, NULL); // 시작점으로 이송 (이미 시작점에 있는 경우에는 이 라인 생략 가능) // ecmIxMot_LineTo(NETID, IX_MAP_IDX, P1, NULL); // 경유이송 시작 ecmIxMot_MoveVia2X_Start(NETID, IX_MAP_IDX, P2, P3, true, ecmROUND_PT_START, 10000, 5000, NULL); // 이송완료 대기 t_i32 ErrCode; if(!ecmIxSt_WaitCompt (NETID, IX_MAP_IDX, &ErrCode)){ // 에러처리! }